/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package MODELO;

import java.sql.*;

public class ManejadorBaseDatos {

    // atributos
    protected String driver = "com.mysql.jdbc.Driver";
    protected String nombreIPServidorBD = "localhost"; // 127.0.0.1 o la real del PC si esta en red
    protected String url = "jdbc:mysql://";
    protected int puertoServidorBD = 3306;
    protected String usuarioBD = "root";
    protected String passwordUsuarioBD = "java_777";
    protected String nombreBD = "bd_libreria";
    private Connection conexion;
    private PreparedStatement sentencia;
    private ResultSet filasConsulta;

    // constructores
    public ManejadorBaseDatos() throws Exception {
        url = url + nombreIPServidorBD + ":" + puertoServidorBD + "/" + nombreBD;
        this.conectar();
    }

    public ManejadorBaseDatos(String driver, String servidor, String url, String usuarioBD, String passwordUsuarioBD, String nombreBD) throws Exception {
        this.driver = driver;
        this.nombreIPServidorBD = servidor;
        this.url = url;
        this.usuarioBD = usuarioBD;
        this.passwordUsuarioBD = passwordUsuarioBD;
        this.nombreBD = nombreBD;
        this.conectar();
    }

    // setter y getter
    //...
    // operaciones sobre BD
    public void conectar() throws Exception {
        //... colcar aqui el codigo para conectar al SMBD deseado
        try {
            Class.forName(driver); // registro el driver de la SMBD
        } catch (ClassNotFoundException ex) {
            throw new Exception("Error de Driver " + ex.getMessage());
        }
        try {
            conexion = DriverManager.getConnection(url, usuarioBD, passwordUsuarioBD);
        } catch (SQLException ex) {
            throw new Exception("Error de Conexion \n Codigo:" + ex.getErrorCode() + " Explicacion:" + ex.getMessage());
        }

    }

    public int actualizar(PreparedStatement sentencia) throws Exception {
        try {
            int res = sentencia.executeUpdate();
            return res;
        } catch (SQLException ex) {
            throw new SQLException("Error al ejecutar sentencia BD Conexion \n Codigo:" + ex.getErrorCode() + " Explicacion:" + ex.getMessage());
        }
    }

    public ResultSet consultar(PreparedStatement sentencia) throws Exception {
        try {
            ResultSet filasBD = sentencia.executeQuery(); // solo para Select
            return filasBD;
        } catch (SQLException ex) {
            throw new SQLException("Error al ejecutar sentencia BD Conexion " + ex.getMessage());
        }
    }

    public void desconectar() {
        try {
            conexion.close();
        } catch (SQLException ex) {
            conexion = null;
        }
    }

    public PreparedStatement crearSentencia(String sql) throws Exception {
        try {
            PreparedStatement sentencia = conexion.prepareStatement(sql);
            return sentencia;
        } catch (SQLException ex) {
            throw new SQLException("Error de Sentencia DB \n Codigo:" + ex.getErrorCode() + " Explicacion:" + ex.getMessage());
        }
    }

    public Connection getConexion() {
        return conexion;
    }

    public void setConexion(Connection conexion) {
        this.conexion = conexion;
    }

    public String getDriver() {
        return driver;
    }

    public void setDriver(String driver) {
        this.driver = driver;
    }

    public ResultSet getFilasConsulta() {
        return filasConsulta;
    }

    public void setFilasConsulta(ResultSet filasConsulta) {
        this.filasConsulta = filasConsulta;
    }

    public String getNombreBD() {
        return nombreBD;
    }

    public void setNombreBD(String nombreBD) {
        this.nombreBD = nombreBD;
    }

    public String getNombreIPServidorBD() {
        return nombreIPServidorBD;
    }

    public void setNombreIPServidorBD(String nombreIPServidorBD) {
        this.nombreIPServidorBD = nombreIPServidorBD;
    }

    public String getPasswordUsuarioBD() {
        return passwordUsuarioBD;
    }

    public void setPasswordUsuarioBD(String passwordUsuarioBD) {
        this.passwordUsuarioBD = passwordUsuarioBD;
    }

    public int getPuertoServidorBD() {
        return puertoServidorBD;
    }

    public void setPuertoServidorBD(int puertoServidorBD) {
        this.puertoServidorBD = puertoServidorBD;
    }

    public PreparedStatement getSentencia() {
        return sentencia;
    }

    public void setSentencia(PreparedStatement sentencia) {
        this.sentencia = sentencia;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getUsuarioBD() {
        return usuarioBD;
    }

    public void setUsuarioBD(String usuarioBD) {
        this.usuarioBD = usuarioBD;
    }
}